package service

import (
	"context"
	"devops-super/api"
	v1 "devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// IClusterConfig 集群配置服务接口
type IClusterConfig interface {
	// Add 新增集群配置
	Add(ctx context.Context, in *entity.AppClusterServerConfig) (err error)

	// Upt 更新集群配置
	Upt(ctx context.Context, in *entity.AppClusterServerConfig) (err error)

	// GetPageLst 分页获取集群配置列表
	GetPageLst(ctx context.Context, in *api.PageLstReq) (out *api.PageLstRes[*entity.AppClusterServerConfig], err error)

	// Del 删除集群配置
	Del(ctx context.Context, id int64) (err error)

	// GetOne 获取单条集群配置
	GetOne(ctx context.Context, id int64) (out *entity.AppClusterServerConfig, err error)

	// GetOptions 获取集群配置选项
	GetOptions(ctx context.Context, in *v1.ClusterConfigGetOptionsReq) (out *v1.ClusterConfigGetOptionsRes, err error)

	GetGroupConfigs(ctx context.Context, in *v1.GetClusterGroupConfigsReq) (out *v1.GetClusterGroupConfigsRes, err error)
	SetGroupConfigs(ctx context.Context, in *v1.SetClusterGroupConfigsReq) (err error)
}

var (
	localClusterConfig IClusterConfig
)

// ClusterConfig 获取集群配置服务实例
func ClusterConfig() IClusterConfig {
	if localClusterConfig == nil {
		panic("implement not found for interface IClusterConfig, forgot register?")
	}
	return localClusterConfig
}

// RegisterClusterConfig 注册集群配置服务实例
func RegisterClusterConfig(i IClusterConfig) {
	localClusterConfig = i
}
